import java.util.*;

public class GrafOrientat
{
	private int count,nincidenta;
	private ArrayList<ArrayList<Integer>> lista_ad;
	private Muchie [] lista_inc;
	
	public GrafOrientat()
	{
		count=0;
		lista_ad=new ArrayList<ArrayList<Integer>>();
		lista_inc = new Muchie[1];
		nincidenta = 0;
	}
	
	public void afisareListaInc()
	{
		for(int j=0;j<nincidenta;j++)
			System.out.println("Arc de la "+lista_inc[j].from+" la "+lista_inc[j].to+" cu cost: "+lista_inc[j].val);
	}
	
	public int getNIncidenta()
	{
		return nincidenta;
	}
	
	public void decNIncidenta()
	{
		nincidenta-=2;
	}
	
	public void addListaInc(int deunde , int unde , int cat)
	{
		if(nincidenta == lista_inc.length)
		{
			Muchie [] aux = new Muchie[nincidenta];
			for(int i=0;i<nincidenta;i++)
				aux[i] = lista_inc[i];
			lista_inc = new Muchie[2*nincidenta];
			for(int i=0;i<nincidenta;i++)
				lista_inc[i] = aux[i];
		}
		
		lista_inc[nincidenta] = new Muchie();
		lista_inc[nincidenta].from=deunde;
		lista_inc[nincidenta].to=unde;
		lista_inc[nincidenta].val=cat;
		nincidenta++;
	}
	
	public void addListaInc(Muchie e)
	{
		if(nincidenta == lista_inc.length)
		{
			Muchie [] aux = new Muchie[nincidenta];
			for(int i=0;i<nincidenta;i++)
				aux[i] = lista_inc[i];
			lista_inc = new Muchie[2*nincidenta];
			for(int i=0;i<nincidenta;i++)
				lista_inc[i] = aux[i];
		}
		
		lista_inc[nincidenta] = new Muchie();
		lista_inc[nincidenta]=e;
		nincidenta++;
	}
	
	public  Muchie[] getListaInc()
	{
		return lista_inc;
	}
	
	public int cautaInListInc(int x ,int y)
	{
		for(int i=0;i<nincidenta;i++)
			if(lista_inc[i].from == x && lista_inc[i].to == y)
					return lista_inc[i].val;
		return 9999999;
	}
	
	public String getArboreMinim()
	{
		String s = new String();
		for(int j=0;j<nincidenta;j++)
			s=s+"["+lista_inc[j].from+","+lista_inc[j].to+"]  ";
		return s;
	}
	
	public boolean cautaInListInc(int x ,int y , boolean ok)
	{
		for(int i=0;i<nincidenta;i++)
			if(lista_inc[i].from == x && lista_inc[i].to == y)
					return true;
		return false;
	}
	
	public int getNrVarfuri()
	{
		return count;
	}
	
	public ArrayList<ArrayList<Integer>> getListaAd()
	{
		return lista_ad;
	}
	
	public int getNrElem(int i)
	{
		return lista_ad.get(i).size();
	}
	
	public ArrayList<Integer> getListaAd(int nod)
	{
		return lista_ad.get(nod);
	}
	
	
	public int addVarf()
	{
		lista_ad.add(new ArrayList<Integer>());
		return count++;
	}
	
	public void addArc(int from, int to)
	{
		//System.out.println(from+" "+to);
		if(from!=to && !lista_ad.get(from).contains(to))
			lista_ad.get(from).add(to);
	}
	
	public void setListaAd(ArrayList<ArrayList<Integer>> lista)
	{
		lista_ad = lista;
	}
}
